//初始化下拉菜单：#id，url，列表显示字段，列表显示名称，dataId字段，搜索框显示字段。是否显示列表表头，选中方法，自动录入dataId改变方法
function initTextSearch(obj,
                        url,
                        searchFields,
                        searchAlias,
                        idField,
                        keyField,
                        isShowHeader,
                        selectValueFn,
                        unsetSelectValueFn){
    $(obj).bsSuggest({
        emptyTip: '未检索到匹配的数据',
        allowNoKeyword: true, //是否允许无关键字时请求数据
        multiWord: false,         //以分隔符号分割的多关键字支持
        getDataMethod: "url",    //获取数据的方式，总是从 URL 获取
        url: url, //优先从url ajax 请求 json 帮助数据，注意最后一个参数为关键字请求参数
        effectiveFields: searchFields,            //有效显示于列表中的字段，非有效字段都会过滤，默认全部。
        effectiveFieldsAlias:searchAlias,       //有效字段的别名对象，用于 header 的显示
        ignorecase: true,
        showHeader: isShowHeader,
        idField: idField,                    //每组数据的哪个字段作为 data-id，优先级高于 indexId 设置（推荐）
        keyField: keyField,                   //每组数据的哪个字段作为输入框内容，优先级高于 indexKey 设置（推荐）
        showBtn: false,     //不显示下拉按钮,
        clearable: false,               // 是否可清除已输入的内容
        // fnPreprocessKeyword: function (keyword) {
        //     return encodeURI(keyword);
        // },
        fnProcessData: function (json) {    // url 获取数据时，对数据的处理，作为 fnGetData 的回调函数
            var data = {value: new Array()};
            if (!json || json.length === 0) {
                return data;
            }
            if(searchFields&&searchFields.length>0){
                $.each(json,function(i,item){
                    var temp={};
                    $.each(searchFields,function(j,it){
                        temp[it]=item[it];
                    });
                    data.value.push(temp);
                });
            }
            return data;
        }
    });
    if(selectValueFn){
        $(obj).on('onSetSelectValue', function (e, keyword, data){
            selectValueFn(data);
        });
    }
    if(unsetSelectValueFn){
        $(obj).on('onUnsetSelectValue', function (e){
            unsetSelectValueFn();
        });
    }
    //去除圆角-保持和正常输入框样式一致
    $(".input-group input").removeAttr("style");
}

function initTextSearchWithParam(obj,
                                 url,
                                 searchFields,
                                 searchAlias,
                                 idField,
                                 keyField,
                                 isShowHeader,
                                 selectValueFn,
                                 unsetSelectValueFn,
                                 paramDataFn){
    $(obj).bsSuggest({
        emptyTip: '未检索到匹配的数据',
        allowNoKeyword: true, //是否允许无关键字时请求数据
        multiWord: false,         //以分隔符号分割的多关键字支持
        getDataMethod: "url",    //获取数据的方式，总是从 URL 获取
        url: url, //优先从url ajax 请求 json 帮助数据，注意最后一个参数为关键字请求参数
        effectiveFields: searchFields,            //有效显示于列表中的字段，非有效字段都会过滤，默认全部。
        effectiveFieldsAlias:searchAlias,       //有效字段的别名对象，用于 header 的显示
        ignorecase: true,
        showHeader: isShowHeader,
        idField: idField,                    //每组数据的哪个字段作为 data-id，优先级高于 indexId 设置（推荐）
        keyField: keyField,                   //每组数据的哪个字段作为输入框内容，优先级高于 indexKey 设置（推荐）
        showBtn: false,     //不显示下拉按钮,
        clearable: false,               // 是否可清除已输入的内容
        listStyle: {
            'padding-top': 0,
            'max-height': '300px',
            'max-width': '380px',
            'overflow': 'auto',
            'width': 'auto',
            'transition': '0.3s',
            '-webkit-transition': '0.3s',
            '-moz-transition': '0.3s',
            '-o-transition': '0.3s'
        },
        fnAdjustAjaxParam: function(keyword, opts) {
            //调整 ajax 请求参数方法，用于更多的请求配置需求。如对请求关键字作进一步处理、修改超时时间等
            if(paramDataFn){
                return {
                    data: paramDataFn()
                };
            } else {
                return null;
            }
        },
        fnProcessData: function (json) {    // url 获取数据时，对数据的处理，作为 fnGetData 的回调函数
            var data = {value: new Array()};
            if (!json || json.length === 0) {
                return data;
            }
            if(searchFields&&searchFields.length>0){
                $.each(json,function(i,item){
                    var temp={};
                    $.each(searchFields,function(j,it){
                        temp[it]=item[it];
                    });
                    data.value.push(temp);
                });
            }
            return data;
        }
    });
    if(selectValueFn){
        $(obj).on('onSetSelectValue', function (e, keyword, data){
            selectValueFn(data);
        });
    }
    if(unsetSelectValueFn){
        $(obj).on('onUnsetSelectValue', function (e){
            unsetSelectValueFn();
        });
    }
    //去除圆角-保持和正常输入框样式一致
    $(".input-group input").removeAttr("style");
}

//设置下拉菜单状态："disable","enable","destroy","version"
function setTextSearchState(obj,state) {
    if(!obj||!state) return;
    $(obj).bsSuggest(state)
}